Many different types of document processing systems permit users to establish data links between different documents, or different components of the same document. A link is a dynamic relationship between an original item of data and a copy of that item. Unlike a static copy of the item, the linked copy is updated whenever the original data changes. For example, a user may create a spreadsheet of data, and link all or a portion of the spreadsheet data to a bar chart which illustrates the relationships of the linked data. In this situation, the spreadsheet is labelled as the source for the linked data, and the chart is identified as the destination for the linked data. Within the spreadsheet, the data is displayed as values in cells, whereas in the chart the data appears as bars of different lengths. Whenever the data in the spreadsheet is subsequently updated, the chart to which it is linked can also be updated automatically, without requiring any intervention on the user's part. Thus, as the numerical values in the cells of the spreadsheet are incremented or decremented, the bars on the chart automatically grow or shrink accordingly.
The number of links that can be made within a document or series of documents is potentially unbounded. For example, in addition to being linked to the bar chart, the same data from the spreadsheet can also be linked to a text document created with a word processing program. A portion of the text document that contains the linked data may itself be linked to another document, e.g. a desktop publishing document or a slide presentation. Whenever the original data in the spreadsheet is updated, the update is passed along to each of the other documents to which it is linked.
This capability to create a potentially unlimited number of links can sometimes lead to unintended results. One such situation is the creation of cyclic links. In this situation, data is linked from a source component of a document to a destination component. Through the creation of other links, the destination component is linked back to the source component, either directly or indirectly. In a system in which updates are carried out automatically, when a change occurs in the source component, it is passed along to the destination component, and then back to the source component through the other links. At the source component, the change is acknowledged, and passed on to the destination component for the second time. It can be seen that, in this situation, the change can be continually passed between the source and destination components in an unending cycle. This is likely not what was intended by the user. It can cause the link structure to update indefinitely or, due to practical limitations on memory or file size, abort due to resource exhaustion.
A similar situation exists for the case of recursive links. In this case, the destination of a link is embedded within the source of the link. When the linked data is changed, the change is passed on to the destination. Whenever a change occurs in the destination, it provides a notification to the component in which it is embedded, in this case the link source. Consequently, a link update is passed from the destination to the source, which again propagates the update along the link. As in the case of the cyclic link structure, the updating process can go on indefinitely.
It is quite possible that the user is unaware that a recursive or cyclic link arrangement has been created, particularly if the various links are created at different times or by different people. It is desirable, therefore, to provide a mechanism by which a user can be alerted to the fact that a potential error-causing link structure has been set up, and thereby take corrective action.